40431ac64Hj4ixUnKmlugZKhXPFE_Q tools/xend/Makefile
4055ad95Se-FqttgxollqOAAHB94zA tools/xend/lib/__init__.py
4055ad97wMLUj0BZT0e_T0EwQN0Bvw tools/xend/lib/console.py
+4048c0ddsF0WrU7HUzTvg1MJoCIfWg tools/xend/lib/control_if.h
4054a301VEag2GwrBrFBna5U1BGlLA tools/xend/lib/main.py
4055ad9ah9IuC3sJT2c_gYIFY5Tw_g tools/xend/lib/manager.py
40431ac8wrUEj-XM7B8smFtx_HA7lQ tools/xend/lib/utils.c
# Copyright (c) 2004, K A Fraser
##############################################
-import errno, os, signal, socket, struct, sys, termios
+import errno, os, signal, socket, struct, sys
+
+from termios import *
+# Indexes into termios.tcgetattr() list.
+IFLAG = 0
+OFLAG = 1
+CFLAG = 2
+LFLAG = 3
+ISPEED = 4
+OSPEED = 5
+CC = 6
def __child_death(signum, frame):
global stop
def __recv_from_sock(sock):
global stop
stop = False
- print "************ REMOTE CONSOLE: CTRL-] TO QUIT ********"
while not stop:
try:
data = sock.recv(1)
except socket.error, error:
if error[0] != errno.EINTR:
raise
- print
- print "************ REMOTE CONSOLE EXITED *****************"
os.wait()
def __send_to_sock(sock):
struct.pack('ii', 0, 0))
sock.connect((host,port))
- oattrs = termios.tcgetattr(0)
- nattrs = termios.tcgetattr(0)
- nattrs[3] = nattrs[3] & ~(termios.ECHO | termios.ICANON)
- nattrs[6][termios.VMIN] = 1
- nattrs[6][termios.VTIME] = 0
- termios.tcsetattr(0, termios.TCSAFLUSH, nattrs)
+ oattrs = tcgetattr(0)
+ nattrs = tcgetattr(0)
+ nattrs[IFLAG] = nattrs[IFLAG] & ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON)
+ nattrs[OFLAG] = nattrs[OFLAG] & ~(OPOST)
+ nattrs[CFLAG] = nattrs[CFLAG] & ~(CSIZE | PARENB)
+ nattrs[CFLAG] = nattrs[CFLAG] | CS8
+ nattrs[LFLAG] = nattrs[LFLAG] & ~(ECHO | ICANON | IEXTEN | ISIG)
+ nattrs[CC][VMIN] = 1
+ nattrs[CC][VTIME] = 0
- try:
- if os.fork():
- signal.signal(signal.SIGCHLD, __child_death)
+ if os.fork():
+ signal.signal(signal.SIGCHLD, __child_death)
+ print "************ REMOTE CONSOLE: CTRL-] TO QUIT ********"
+ tcsetattr(0, TCSAFLUSH, nattrs)
+ try:
__recv_from_sock(sock)
- else:
- __send_to_sock(sock)
- finally:
- termios.tcsetattr(0, termios.TCSAFLUSH, oattrs)
+ finally:
+ tcsetattr(0, TCSAFLUSH, oattrs)
+ print
+ print "************ REMOTE CONSOLE EXITED *****************"
+ else:
+ __send_to_sock(sock)
if __name__ == '__main__':
connect(str(sys.argv[1]),int(sys.argv[2]))
--- /dev/null
+/******************************************************************************
+ * control_if.h
+ *
+ * Interface to server controller (e.g., 'xend'). This header file defines the
+ * interface that is shared with guest OSes.
+ *
+ * Copyright (c) 2004, K A Fraser
+ */
+
+#ifndef __CONTROL_IF_H__
+#define __CONTROL_IF_H__
+
+typedef struct {
+ u8 type; /* echoed in response */
+ u8 subtype; /* echoed in response */
+ u8 id; /* echoed in response */
+ u8 length; /* number of bytes in 'msg' */
+ unsigned char msg[60]; /* type-specific message data */
+} control_msg_t;
+
+#define CONTROL_RING_SIZE 8
+typedef unsigned int CONTROL_RING_IDX;
+#define MASK_CONTROL_IDX(_i) ((_i)&(CONTROL_RING_SIZE-1))
+
+typedef struct {
+ control_msg_t tx_ring[CONTROL_RING_SIZE]; /* guest-OS -> controller */
+ control_msg_t rx_ring[CONTROL_RING_SIZE]; /* controller -> guest-OS */
+ CONTROL_RING_IDX tx_req_prod, tx_resp_prod;
+ CONTROL_RING_IDX rx_req_prod, rx_resp_prod;
+} control_if_t;
+
+#define CMSG_CONSOLE 0
+#define CMSG_CONSOLE_DATA 0
+
+#endif /* __CONTROL_IF_H__ */
from distutils.core import setup, Extension
utils = Extension("utils",
- include_dirs = ["../xc/lib",
- "../../xenolinux-sparse/include"],
+ include_dirs = ["../xc/lib"],
library_dirs = ["../xc/lib"],
libraries = ["xc"],
sources = ["lib/utils.c"])